package com.tinfeng.oop;

public class JavaClassObject {
    // 在代码中，事物的静态特征被抽象成属性，事物的动态行为被抽象成方法。一个基本的类可以包含若干属性和方法。

    // 每个类都可以由以下元素组成
    /**
     * 成员属性：字段，成员变量或实例变量，属性是用以保存每个对象的数据的变量
     * 成员方法：也称实例方法，成员方法是对对象执行的操作
     * 静态变量：也称为类属性，它是同一个类的任何对象所共有的
     * 静态方法：也称为类方法，静态方法是不影响特定对象的方法
     * 内部类：可以将一个类包含在另一个类中，常用于该类仅提供给声明它的类使用的情况
     * 构造方法：生成新对象的特殊方法；
     * 参数化类型：可以在定义期间将参数化类型分配给类。参数化类型将替换为在类实例化时指定的类型
     */

    // 对象实例化
    // ImoocStudent student   =   new ImoocStudent();
    // 声明对象，在内存的栈空间中执行   实例化对象， 在内存的堆空间执行

    // 我们在上面两个有参构造方法中，成员属性的命名和参数变量的命名是不同的，如果参数列表中参数变量的命名和实例属性相同。
    // 将无法完成对实例属性的赋值，也就是说，下面的写法是错误的：
    // public ImmocStudent(String nickname) {
    //    nickname = nickname;
    // }
    // 因为构造方法在参数的赋值过程中，会优先到同一个作用范围内的 nickname 进行赋值操作，这就是所谓的就近原则。
    // 这时我们可以使用 this 关键字。

    // 在方法内部，this 关键字是当前对象的默认引用，简单说，谁调用了它谁就是 this。
    // 因此，通过 this.field 就可以访问当前实例的字段，解决实例变量和参数变量名称冲突的问题。
     //  this 为了解决名称冲突问题并 直接指向引用
}
